package gob.cgr.sgrh.ejb.session;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.Query;

import gob.cgr.sgrh.ejb.entidad.DatoFamiliar;
import gob.cgr.sgrh.ejb.entidad.Docencia;
import gob.cgr.sgrh.ejb.entidad.EstudioBasico;
import gob.cgr.sgrh.ejb.entidad.EstudioProfesional;
import gob.cgr.sgrh.ejb.entidad.FormacionLaboral;
import gob.cgr.sgrh.ejb.entidad.Persona;
import gob.cgr.sgrh.ejb.local.PersonaDAO;

@Local
@Stateless
public class PersonaSession extends GenericSessionImpl<Persona, Integer>
implements PersonaDAO{
@Override
public Persona buscarPersona(String dni) {
	Query q=getEm().createNamedQuery("Persona.findByNroDocumento");
	q.setParameter("nroDocumento", dni);
	List p=q.getResultList();
	Persona per=null;
	for(Object o:p){
		per=(Persona)o;
		if(per.getPersonalList().size()>0 && per.getPersonalList().get(0).getEstado().equals("ACTIVO")){
			per.setPersonal(true);
		}
		System.out.println("desde el ejb"+per.getPersonalList());
		break;
	}
	return per;
}



@Override

public void agregarFamiliar(DatoFamiliar dato) {
	// TODO Auto-generated method stub
	if(dato.getIdDatoFamiliar()!=null){
		getEm().merge(dato);
	}
	else{
	if(dato.getIdPersona().getIdPersona()==null){
		registrar(dato.getIdPersona());
	}	
		
	getEm().persist(dato);
	}
}

@Override
public void agregarEstudiosBasicos(EstudioBasico ebasico) {
	// TODO Auto-generated method stub
	getEm().merge(ebasico);
	
}

@Override
public void agregarEstudiosProfesionales(EstudioProfesional eprof) {
	// TODO Auto-generated method stub
	getEm().merge(eprof);
	
}

@Override
	public void quitarFamiliar(DatoFamiliar dato) {
		// TODO Auto-generated method stub
	try {
		getEm().remove(getEm().merge(dato));
		System.out.println("removido");
	} catch (Exception e) {
		// TODO: handle exception
		System.out.println("error al eliminar el familiar "+e.getMessage());
	}
		
	}
@Override
	public void quitarEstudiosBasicos(EstudioBasico ebasico) {
		// TODO Auto-generated method stub
	getEm().remove(getEm().merge(ebasico));
		
	}
@Override
	public void quitarEstudiosProfesionales(EstudioProfesional eprof) {
		// TODO Auto-generated method stub
	
	Query q=getEm().createQuery("delete  from EstudioProfesional e where e.idEstudioProfesional=:idEstudioProfesional");
	q.setParameter("idEstudioProfesional", eprof.getIdEstudioProfesional());
	int i=q.executeUpdate();
	//getEm().remove(getEm().merge(eprof));
	
	}
@Override
	public void agregarFormacionLaboral(FormacionLaboral formacion) {
		// TODO Auto-generated method stub
	
		if(formacion.getIdFormacionLaboral()!=null){
			getEm().merge(formacion);
			
		}else{
			getEm().persist(formacion);
			
		}
	
		
	
	}
@Override
	public void quitarFormacionLaboral(FormacionLaboral formacion) {
		// TODO Auto-generated method stub
		getEm().remove(getEm().merge(formacion));
	}

@Override
	public List<EstudioBasico> listarEstudioBasicoPersona(Integer idPersona) {
		Query q=getEm().createNamedQuery("EstudioBasico.listarPorIdPersona");
		q.setParameter("idPersona", idPersona);
		Object o=q.getResultList();
		return o==null?new ArrayList<EstudioBasico>():(ArrayList<EstudioBasico>)o;
	}
@Override
	public List<EstudioProfesional> listarEstudioProfesionalPersona(Integer idPersona) {
	Query q=getEm().createNamedQuery("EstudioProfesional.listarPorIdPersona");
	q.setParameter("idPersona", idPersona);
	Object o=q.getResultList();
	return o==null?new ArrayList<EstudioProfesional>():(ArrayList<EstudioProfesional>)o;
	}


@Override
public void agregarDocencia(Docencia docencia) {
	// TODO Auto-generated method stub
	if(docencia.getIdDocencia()==null){
		getEm().persist(docencia);
	}
	else{
		getEm().merge(docencia);
	}
	
}



@Override
public void quitarDocencia(Docencia docencia) {
	// TODO Auto-generated method stub
	getEm().remove(getEm().merge(docencia));
	
}



@Override
public List<Docencia> listarDocencias(Integer idPersona) {
	Query q=getEm().createNamedQuery("Docencia.listarPorPersona");
	q.setParameter("idPersona", idPersona);
	Object o=q.getResultList();
	return o==null?new ArrayList<Docencia>():(ArrayList<Docencia>)o;
}


@Override
public Persona cargarPersonaCompleta(Integer idPersona) {
	
	Persona persona=obtener(idPersona);
	System.out.println("obtenidos :"+persona);
	persona.setFormacionLaboralList(listarFormacionLaboralPersona(idPersona));
	System.out.println(".. devolviendo "+persona.getFormacionLaboralList());
	persona.setEstudioBasicoList(listarEstudioBasicoPersona(idPersona));
	persona.setEstudioProfesionalList(listarEstudioProfesionalPersona(idPersona));
	persona.setDocenciaList(listarDocencias(idPersona));
	System.out.println("termino la carga");
	
		
	return persona;
}
@Override
	public List<FormacionLaboral> listarFormacionLaboralPersona(
			Integer idPersona) {
	Query q=getEm().createNamedQuery("FormacionLaboral.listarPorIdPersona");
	q.setParameter("idPersona", idPersona);
	Object o=q.getResultList();
	return o==null?new ArrayList<FormacionLaboral>():(ArrayList<FormacionLaboral>)o;
	}

}
